// 导入axios
import axios from 'axios'
// 导入store
import store from '@/store'
// 导入router
import router from '@/router'

// 创建axios实例
const instance = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net'
})

// 请求拦截器
// 全局注入token
instance.interceptors.request.use(config => {
  // 获取token
  const { token } = store.state.user.profile
  // 判断token是否存在
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

// 响应拦截器
// 处理token失效 携带当前地址跳转至登录页 登录后回跳
instance.interceptors.response.use(response => {
  return response.data
}, error => {
  if (error.response && error.response.status === 401) {
    // 获取当前地址
    // 因为vue3中的路由是通过createRoute方法创建的实例 (ref) 所以需要加value
    // 为了避免地址中的特殊符号编码问题
    const currUrl = encodeURIComponent(router.currentRoute.value.fullPath)
    // replace 跳转不会保留历史记录 不能跳转的上一个地址
    router.replace('/login?returnUrl=' + currUrl)
  }
  return Promise.reject(error)
})

// 再次封装instance
/**
 *
 * @param {*} url 请求地址
 * @param {*} method 请求方法
 * @param {*} rdata 请求参数
 * @returns Promise
 */
const request = (url, method, rdata) => {
  // 返回Promise
  return instance({
    method,
    url,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: rdata
  })
}

export default request
